#ifndef __Display_hpp__
#define __Display_hpp__

#include "Pointer.hpp"
#include "Point2.hpp"
#include "Singleton.hpp"
#include "Array.hpp"

namespace ge {

GE_DECLARE_CLASS( Display );

//----------------------------------------------------------------------------//
// Display
//----------------------------------------------------------------------------//

class Display : public virtual ReferenceCounted, public Singleton< Display >
{
 
 friend class Device;

 public:

     typedef Size2ui Mode;

     class ModeEx : public Mode
     {
      public:

          uint bpp;
          uint freq;

          ModeEx( uint _w = 0, uint _h = 0, uint _c = 0, uint _f = 0 ) : Mode( _w, _h ), bpp( _c ), freq( _f )
          {
          }

          bool operator == ( const ModeEx& _mode ) const
          {
                return width == _mode.width && height == _mode.height && freq == _mode.freq && bpp == _mode.bpp; 
          }
     };

     struct Info
     {
          Size2ui size;
          Size2ui resolution;
          uint desktop_bpp;
          float aspect;
          bool wide_screen;
          Array< ModeEx > modes;
     };

 protected:


     Display( void );

     virtual ~Display( void );
};

} // namespace ge

#endif//__Display_hpp__
